package com.lijinjiang.reflect02_constructor;

import org.junit.Test;

import java.lang.reflect.Constructor;

/**
 * @ClassName TestConstructor01
 * @Description TODO
 * @Author Li
 * @Date 2022/9/20 19:57
 * @ModifyDate 2022/9/20 19:57
 * @Version 1.0
 */
public class TestConstructor01 {
    // 1.getConstructors
    @Test
    public void testGetConstructors() {
        // 1.获取类对象
        Class c = Student.class;
        // 2.获取所有类对象的公共构造器
        Constructor[] constructors = c.getConstructors();
        // 3.遍历
        for (Constructor constructor : constructors) {
            System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
        }

    }

    // 2.getDeclaredConstructors
    @Test
    public void testGetDeclaredConstructors() {
        // 1.获取类对象
        Class c = Student.class;
        // 2.获取所有类对象的构造器
        Constructor[] constructors = c.getDeclaredConstructors();
        // 3.遍历
        for (Constructor constructor : constructors) {
            System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
        }

    }

    // 3.getConstructor(Class<?>... parameterTypes)
    @Test
    public void testGetConstructor() throws Exception {
        // 1.获取类对象
        Class c = Student.class;
        // 2.获取所有类对象的构造器
        Constructor constructor = c.getConstructor(String.class, int.class);
        // 3.输出
        System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
    }

    // 4.getDeclaredConstructor(Class<?>... parameterTypes)
    @Test
    public void testGetDeclaredConstructor() throws Exception {
        // 1.获取类对象
        Class c = Student.class;
        // 2.获取所有类对象的构造器
        Constructor constructor = c.getDeclaredConstructor();
        // 3.输出
        System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
    }
}
